﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using TaxiCaosSOAPService.Dominio;
using TaxiCaosSOAPService.Persistencia;
using TaxiCaosSOAPService.Exceptions;

namespace TaxiCaosSOAPService
{
   public class Tarifarios : ITarifarios
    {
        private TarifarioDAO tarifarioDAO = null;
        private TarifarioDAO TarifarioDAO
        {
            get
            {
                if (tarifarioDAO == null)
                    tarifarioDAO = new TarifarioDAO();
                return tarifarioDAO;
            }
        }

        public TarifarioDescuento ObtenerTarifarioPorOrigenYDestino(string codigoOrig, string codigoDest, int cantidad)
        {
                Tarifario tarifario = TarifarioDAO.ObtenerPorOrigenDestino(codigoOrig, codigoDest);

                if (tarifario == null)
                {
                    TarifarioException ex = new TarifarioException { Message = "No existe una tarifa definida para los distritos seleccionados." };
                    throw new FaultException<TarifarioException>(ex,ex.Message); 
                }

                Descuento descuento_ = new Descuento();
                //Descuento descuento = new Descuento();

                if (cantidad > 0)
                {
                    DescuentosWS.DescuentosClient proxy = new DescuentosWS.DescuentosClient();
                    DescuentosWS.Descuento descuento = proxy.ObtenerPorcentajeDescuentoPorCantidadReservas(cantidad);

                    if (descuento != null)
                    {
                        descuento_.IdDescuento = descuento.IdDescuento;
                        descuento_.Cantidad = descuento.Cantidad;
                        descuento_.PorcentajeDescuento = descuento.PorcentajeDescuento;
                        descuento_.Comentario = descuento.Comentario;
                    }
                    else
                        descuento_ = null;
                }
                
               TarifarioDescuento tarifarioDescuento = new TarifarioDescuento();
               tarifarioDescuento.Tarifario = tarifario;
               tarifarioDescuento.Descuento = descuento_;
                
               return tarifarioDescuento;
        }

        public Tarifario ObtenerTarifario(int codigo)
        {
            return TarifarioDAO.Obtener(codigo);
        }

        

    }
}
